package pers.hl.module_main.common

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.provider.MediaStore
import androidx.core.content.ContextCompat
import com.blankj.utilcode.util.LogUtils
import me.devilsen.czxing.Scanner
import me.devilsen.czxing.code.BarcodeFormat
import me.devilsen.czxing.util.BarCodeUtil
import me.devilsen.czxing.view.ScanActivityDelegate
import me.devilsen.czxing.view.ScanView
import pers.hl.common.base.ext.showMessage
import pers.hl.common.utils.MainThread
import pers.hl.module_main.R

object ScanHelper {

    const val CODE_SELECT_IMAGE = 0x01
    
    fun openScanPage(context: Context, title: String, successBlock:(activity: Activity, result: String, format: BarcodeFormat) ->Unit) {
        val scanColors = mutableListOf(R.color.recommend, R.color.recommend_dark)
        Scanner.with(context)
            .setMaskColor(ContextCompat.getColor(context, R.color.transparent)) // 设置设置扫码框四周颜色
            .setBorderColor(ContextCompat.getColor(context, R.color.recommend)) // 扫码框边框颜色
            .setBorderSize(BarCodeUtil.dp2px(context, 200f)) // 设置扫码框大小
            //        .setBorderSize(BarCodeUtil.dp2px(this, 200), BarCodeUtil.dp2px(this, 100))     // 设置扫码框长宽（如果同时调用了两个setBorderSize方法优先使用上一个）
            .setCornerColor(ContextCompat.getColor(context, R.color.recommend)) // 扫码框角颜色
            .setScanLineColors(scanColors) // 扫描线颜色（这是一个渐变颜色）
            //        .setHorizontalScanLine()                              // 设置扫码线为水平方向（从左到右）
            .setScanMode(ScanView.SCAN_MODE_TINY) // 扫描区域 0：混合 1：只扫描框内 2：只扫描整个屏幕
            //        .setBarcodeFormat(BarcodeFormat.EAN_13)                 // 设置扫码格式
            .setTitle(title) // 扫码界面标题
            .showAlbum(false) // 显示相册(默认为true)
            .setScanNoticeText("扫描二维码/条形码") // 设置扫码文字提示
            .setFlashLightOnText("打开闪光灯") // 打开闪光灯提示
            .setFlashLightOffText("关闭闪光灯") // 关闭闪光灯提示
            .setFlashLightOnDrawable(R.drawable.ic_flashlight_open) // 闪光灯打开时的样式
            .setFlashLightOffDrawable(R.drawable.ic_flashlight_close) // 闪光灯关闭时的样式
//            .setFlashLightInvisible() // 不使用闪光灯图标及提示
            .continuousScan() // 连续扫码，不关闭扫码界面
            .enableOpenCVDetect(false) // 关闭OpenCV探测，避免没有发现二维码也放大的现象，但是这样可能降低扫码的成功率，请结合业务关闭（默认开启）
            .setOnClickAlbumDelegate(object : ScanActivityDelegate.OnClickAlbumDelegate {
                override fun onClickAlbum(activity: Activity) {       // 点击右上角的相册按钮
                    val albumIntent =
                        Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
                    activity.startActivityForResult(albumIntent, CODE_SELECT_IMAGE)
                }

                override fun onSelectData(requestCode: Int, data: Intent) { // 选择图片返回的数据
                    if (requestCode == CODE_SELECT_IMAGE) {
//                        selectPic(data)
                        showMessage("功能开发中...")
                    }
                }
            })
            .setOnScanResultDelegate { activity, result, format ->
                LogUtils.d("扫码结果回调线程:${Thread.currentThread().name}")
                // 回到主线程处理
                MainThread().post {
                    // 接管扫码成功的数据
                    successBlock(activity, result, format)
                }
            }
            .start()
    }
}